package com.xgzit.xgzmall.ware.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xgzit.common.dto.mq.OrderDto;
import com.xgzit.common.dto.mq.StockLockedDto;
import com.xgzit.common.utils.PageUtils;
import com.xgzit.xgzmall.ware.entity.WareSkuEntity;
import com.xgzit.xgzmall.ware.vo.LockStockResultVo;
import com.xgzit.xgzmall.ware.vo.SkuHasStockVo;
import com.xgzit.xgzmall.ware.vo.WareSkuLockVo;

import java.util.List;
import java.util.Map;

/**
 * 商品库存
 *
 * @author xgz
 * @email 923904706@qq.com
 * @date 2021-03-20 17:37:51
 */
public interface WareSkuService extends IService<WareSkuEntity> {

    PageUtils queryPage(Map<String, Object> params);
    /**
    * 保存到仓库中
    * @param skuId:
    * @param wareId: 仓库id
    * @param skuNum:  数量
    * @return void
    */
    void addStock(Long skuId, Long wareId, Integer skuNum);

    /**
    * 获取是否有库存
    * @param skuIds:
    * @return java.util.List<com.xgzit.xgzmall.ware.vo.SkuHasStockVo>
    */
    List<SkuHasStockVo> getSkuHasStock(List<Long> skuIds);

    /**
    * 锁定库存
    * @param vo:
    * @return java.lang.Boolean
    */
    Boolean orderLockStock(WareSkuLockVo vo);

    /**
    * 解锁库存
    * @param dto:
    * @return void
    */
    void unlockStock(StockLockedDto dto);

    /**
    * 解锁库存
     * 防止订单服务卡顿、网络不通等原因，导致解锁服务先于订单关闭 造成 库存无法解锁。
     * 接收 订单解锁成功发来的消息，再进行检查是否要解锁库存
    * @param dto:
    * @return void
    */
    void unlockStock(OrderDto dto);
}

